<!DOCTYPE HTML>

<html lang="en">
<head>

<title>RoleVoter (spring-security-docs 5.6.3 API)</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../jquery/jquery-ui.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip/dist/jszip.min.js"></script>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils.min.js"></script>
<!--[if IE]>
<script type="text/javascript" src="../../../../../jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script>
<![endif]-->
<script type="text/javascript" src="../../../../../jquery/jquery-3.5.1.js"></script>
<script type="text/javascript" src="../../../../../jquery/jquery-ui.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="RoleVoter (spring-security-docs 5.6.3 API)";
        }
    }
    catch(err) {
    }
//-->
var data = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
var pathtoroot = "../../../../../";
var useModuleDirectories = true;
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<header role="banner">
<nav role="navigation">
<div class="fixedNav">

<div class="topNav"><a id="navbar.top">

</a>
<div class="skipNav"><a href="RoleVoter.html#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.top.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<ul class="navListSearch">
<li><label for="search">SEARCH:</label>
<input type="text" id="search" value="search" disabled="disabled">
<input type="reset" id="reset" value="reset" disabled="disabled">
</li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.top">

</a></div>

</div>
<div class="navPadding">&nbsp;</div>
<script type="text/javascript"><!--
$('.navPadding').css('padding-top', $('.fixedNav').css("height"));
//-->
</script>
</nav>
</header>

<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.springframework.security.access.vote</a></div>
<h2 title="Class RoleVoter" class="title">Class RoleVoter</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.springframework.security.access.vote.RoleVoter</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="../AccessDecisionVoter.html" title="interface in org.springframework.security.access">AccessDecisionVoter</a>&lt;java.lang.Object&gt;</code></dd>
</dl>
<dl>
<dt>Direct Known Subclasses:</dt>
<dd><code><a href="RoleHierarchyVoter.html" title="class in org.springframework.security.access.vote">RoleHierarchyVoter</a></code></dd>
</dl>
<hr>
<pre>public class <span class="typeNameLabel">RoleVoter</span>
extends java.lang.Object
implements <a href="../AccessDecisionVoter.html" title="interface in org.springframework.security.access">AccessDecisionVoter</a>&lt;java.lang.Object&gt;</pre>
<div class="block">Votes if any <a href="../ConfigAttribute.html#getAttribute()"><code>ConfigAttribute.getAttribute()</code></a> starts with a prefix indicating
that it is a role. The default prefix string is <Code>ROLE_</Code>, but this may be
overridden to any value. It may also be set to empty, which means that essentially any
attribute will be voted on. As described further below, the effect of an empty prefix
may not be quite desirable.
<p>
Abstains from voting if no configuration attribute commences with the role prefix.
Votes to grant access if there is an exact matching
<a href="../../core/GrantedAuthority.html" title="interface in org.springframework.security.core"><code>GrantedAuthority</code></a> to a
<code>ConfigAttribute</code> starting with the role prefix. Votes to deny access if
there is no exact matching <code>GrantedAuthority</code> to a
<code>ConfigAttribute</code> starting with the role prefix.
<p>
An empty role prefix means that the voter will vote for every ConfigAttribute. When
there are different categories of ConfigAttributes used, this will not be optimal since
the voter will be voting for attributes which do not represent roles. However, this
option may be of some use when using pre-existing role names without a prefix, and no
ability exists to prefix them with a role prefix on reading them in, such as provided
for example in <a href="../../core/userdetails/jdbc/JdbcDaoImpl.html" title="class in org.springframework.security.core.userdetails.jdbc"><code>JdbcDaoImpl</code></a>.
<p>
All comparisons and prefixes are case sensitive.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="field.summary">

</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a id="fields.inherited.from.class.org.springframework.security.access.AccessDecisionVoter">

</a>
<h3>Fields inherited from interface&nbsp;org.springframework.security.access.<a href="../AccessDecisionVoter.html" title="interface in org.springframework.security.access">AccessDecisionVoter</a></h3>
<code><a href="../AccessDecisionVoter.html#ACCESS_ABSTAIN">ACCESS_ABSTAIN</a>, <a href="../AccessDecisionVoter.html#ACCESS_DENIED">ACCESS_DENIED</a>, <a href="../AccessDecisionVoter.html#ACCESS_GRANTED">ACCESS_GRANTED</a></code></li>
</ul>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.summary">

</a>
<h3>Constructor Summary</h3>
<table class="memberSummary">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Constructor</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<th class="colConstructorName" scope="row"><code><span class="memberNameLink"><a href="RoleVoter.html#%3Cinit%3E()">RoleVoter</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">

</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>java.lang.String</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RoleVoter.html#getRolePrefix()">getRolePrefix</a></span>()</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RoleVoter.html#setRolePrefix(java.lang.String)">setRolePrefix</a></span>&#8203;(java.lang.String&nbsp;rolePrefix)</code></th>
<td class="colLast">
<div class="block">Allows the default role prefix of <code>ROLE_</code> to be overridden.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RoleVoter.html#supports(java.lang.Class)">supports</a></span>&#8203;(java.lang.Class&lt;?&gt;&nbsp;clazz)</code></th>
<td class="colLast">
<div class="block">This implementation supports any type of class, because it does not query the
presented secure object.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>boolean</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RoleVoter.html#supports(org.springframework.security.access.ConfigAttribute)">supports</a></span>&#8203;(<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&nbsp;attribute)</code></th>
<td class="colLast">
<div class="block">Indicates whether this <code>AccessDecisionVoter</code> is able to vote on the passed
<code>ConfigAttribute</code>.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>int</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="RoleVoter.html#vote(org.springframework.security.core.Authentication,java.lang.Object,java.util.Collection)">vote</a></span>&#8203;(<a href="../../core/Authentication.html" title="interface in org.springframework.security.core">Authentication</a>&nbsp;authentication,
java.lang.Object&nbsp;object,
java.util.Collection&lt;<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&gt;&nbsp;attributes)</code></th>
<td class="colLast">
<div class="block">Indicates whether or not access is granted.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.java.lang.Object">

</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="constructor.detail">

</a>
<h3>Constructor Detail</h3>
<a id="&lt;init&gt;()">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>RoleVoter</h4>
<pre>public&nbsp;RoleVoter()</pre>
</li>
</ul>
</li>
</ul>
</section>

<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">

</a>
<h3>Method Detail</h3>
<a id="getRolePrefix()">

</a>
<ul class="blockList">
<li class="blockList">
<h4>getRolePrefix</h4>
<pre class="methodSignature">public&nbsp;java.lang.String&nbsp;getRolePrefix()</pre>
</li>
</ul>
<a id="setRolePrefix(java.lang.String)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>setRolePrefix</h4>
<pre class="methodSignature">public&nbsp;void&nbsp;setRolePrefix&#8203;(java.lang.String&nbsp;rolePrefix)</pre>
<div class="block">Allows the default role prefix of <code>ROLE_</code> to be overridden. May be set
to an empty value, although this is usually not desirable.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>rolePrefix</code> - the new prefix</dd>
</dl>
</li>
</ul>
<a id="supports(org.springframework.security.access.ConfigAttribute)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>supports</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;supports&#8203;(<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&nbsp;attribute)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../AccessDecisionVoter.html#supports(org.springframework.security.access.ConfigAttribute)">AccessDecisionVoter</a></code></span></div>
<div class="block">Indicates whether this <code>AccessDecisionVoter</code> is able to vote on the passed
<code>ConfigAttribute</code>.
<p>
This allows the <code>AbstractSecurityInterceptor</code> to check every configuration
attribute can be consumed by the configured <code>AccessDecisionManager</code> and/or
<code>RunAsManager</code> and/or <code>AfterInvocationManager</code>.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../AccessDecisionVoter.html#supports(org.springframework.security.access.ConfigAttribute)">supports</a></code>&nbsp;in interface&nbsp;<code><a href="../AccessDecisionVoter.html" title="interface in org.springframework.security.access">AccessDecisionVoter</a>&lt;java.lang.Object&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>attribute</code> - a configuration attribute that has been configured against the
<code>AbstractSecurityInterceptor</code></dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>true if this <code>AccessDecisionVoter</code> can support the passed
configuration attribute</dd>
</dl>
</li>
</ul>
<a id="supports(java.lang.Class)">

</a>
<ul class="blockList">
<li class="blockList">
<h4>supports</h4>
<pre class="methodSignature">public&nbsp;boolean&nbsp;supports&#8203;(java.lang.Class&lt;?&gt;&nbsp;clazz)</pre>
<div class="block">This implementation supports any type of class, because it does not query the
presented secure object.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../AccessDecisionVoter.html#supports(java.lang.Class)">supports</a></code>&nbsp;in interface&nbsp;<code><a href="../AccessDecisionVoter.html" title="interface in org.springframework.security.access">AccessDecisionVoter</a>&lt;java.lang.Object&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>clazz</code> - the secure object</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>always <code>true</code></dd>
</dl>
</li>
</ul>
<a id="vote(org.springframework.security.core.Authentication,java.lang.Object,java.util.Collection)">

</a>
<ul class="blockListLast">
<li class="blockList">
<h4>vote</h4>
<pre class="methodSignature">public&nbsp;int&nbsp;vote&#8203;(<a href="../../core/Authentication.html" title="interface in org.springframework.security.core">Authentication</a>&nbsp;authentication,
                java.lang.Object&nbsp;object,
                java.util.Collection&lt;<a href="../ConfigAttribute.html" title="interface in org.springframework.security.access">ConfigAttribute</a>&gt;&nbsp;attributes)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../AccessDecisionVoter.html#vote(org.springframework.security.core.Authentication,S,java.util.Collection)">AccessDecisionVoter</a></code></span></div>
<div class="block">Indicates whether or not access is granted.
<p>
The decision must be affirmative (<code>ACCESS_GRANTED</code>), negative (
<code>ACCESS_DENIED</code>) or the <code>AccessDecisionVoter</code> can abstain (
<code>ACCESS_ABSTAIN</code>) from voting. Under no circumstances should implementing
classes return any other value. If a weighting of results is desired, this should
be handled in a custom
<a href="../AccessDecisionManager.html" title="interface in org.springframework.security.access"><code>AccessDecisionManager</code></a> instead.
<p>
Unless an <code>AccessDecisionVoter</code> is specifically intended to vote on an access
control decision due to a passed method invocation or configuration attribute
parameter, it must return <code>ACCESS_ABSTAIN</code>. This prevents the coordinating
<code>AccessDecisionManager</code> from counting votes from those
<code>AccessDecisionVoter</code>s without a legitimate interest in the access control
decision.
<p>
Whilst the secured object (such as a <code>MethodInvocation</code>) is passed as a
parameter to maximise flexibility in making access control decisions, implementing
classes should not modify it or cause the represented invocation to take place (for
example, by calling <code>MethodInvocation.proceed()</code>).</div>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../AccessDecisionVoter.html#vote(org.springframework.security.core.Authentication,S,java.util.Collection)">vote</a></code>&nbsp;in interface&nbsp;<code><a href="../AccessDecisionVoter.html" title="interface in org.springframework.security.access">AccessDecisionVoter</a>&lt;java.lang.Object&gt;</code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>authentication</code> - the caller making the invocation</dd>
<dd><code>object</code> - the secured object being invoked</dd>
<dd><code>attributes</code> - the configuration attributes associated with the secured object</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>either <a href="../AccessDecisionVoter.html#ACCESS_GRANTED"><code>AccessDecisionVoter.ACCESS_GRANTED</code></a>, <a href="../AccessDecisionVoter.html#ACCESS_ABSTAIN"><code>AccessDecisionVoter.ACCESS_ABSTAIN</code></a> or
<a href="../AccessDecisionVoter.html#ACCESS_DENIED"><code>AccessDecisionVoter.ACCESS_DENIED</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>

<footer role="contentinfo">
<nav role="navigation">

<div class="bottomNav"><a id="navbar.bottom">

</a>
<div class="skipNav"><a href="RoleVoter.html#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a id="navbar.bottom.firstrow">

</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="RoleVoter.html#method.detail">Method</a></li>
</ul>
</div>
<a id="skip.navbar.bottom">

</a></div>

</nav>
</footer>
<script>if (window.parent == window) {(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');ga('create', 'UA-2728886-23', 'auto', {'siteSpeedSampleRate': 100});ga('send', 'pageview');}</script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7040ead018ee97cf","token":"bffcb8a918ae4755926f76178bfbd26b","version":"2021.12.0","si":100}' crossorigin="anonymous"></script>
</body>
</html>
